1、jiffies
	jiffies 变量用来记录系统从启动以来的系统节拍数，另外还有 jiffies_64 ，它与 jiffies 一样，只不过是64位的，
且他们的低32位是共用的。以下是与 jiffies 有关的常用函数：
	/* 实际使用中unkown通常为jiffies，known通常是需要对比的值 */
	//unkown > known返回真
	time_after(unkown, known)
	//unkown < known返回真
	time_before(unkown, known)
	//unkown >= known返回真
	time_after_eq(unkown, known)
	//unkown <= known返回真
	time_before_eq(unkown, known)
	//将jiffies转换为ms
	int jiffies_to_msecs(const unsigned long j)
	//将jiffies转换为us
	int jiffies_to_usecs(const unsigned long j)
	//将jiffies转换为ns
	u64 jiffies_to_nsecs(const unsigned long j)
	//将ms转换为jiffies
	long msecs_to_jiffies(const unsigned int m)
	//将us转换为jiffies
	long usecs_to_jiffies(const unsigned int u)
	//将ns转换为jiffies
	unsigned long nsecs_to_jiffies(u64 n)
2、低精度定时器
	内核的低精度定时器采用系统时钟节拍来实现，其精度由系统时钟节拍决定，如下是低精度定时器的数据结构和常用函
数：
	/**
	 * 低精度定时器的数据结构
	 */
	struct timer_list {
		struct hlist_node entry;
		//到期时间，单位是节拍数
		unsigned long expires;
		//定时处理函数
		void (*function)(struct timer_list *);
		u32 flags;
	
	#ifdef CONFIG_LOCKDEP
		struct lockdep_map	lockdep_map;
	#endif
	};
	/**
	 * 初始化定时器
	 * timer 要初始化的定时器
	 * func 定时处理函数
	 * flags 一般为0
	 */
	void timer_setup(struct timer_list *timer, void (*func)(struct timer_list *), unsigned int flags)
	/**
	 * 向内核注册并启动定时器，采用timer中的expires启动
	 * timer 要注册的定时器
	 */
	void add_timer(struct timer_list *timer)
	/**
	 * 设置定时器到期时间，如果定时器没有注册则会将其注册
	 * timer 要修改的定时器
	 * expires 修改后的到期时间
	 */
	int mod_timer(struct timer_list *timer, unsigned long expires)
	/**
	 * 从内核删除定时器，不管定时器处于什么状态都直接删除，在多处理器环境中应等待定时器回调函数退出后才能调
	 * 用该函数删除定时器
	 * timer 要删除的定时器
	 */
	int del_timer(struct timer_list * timer)
	/**
	 * 从内核删除定时器，此函数需要等待定时器回调函数执行完才删除，此函数可能会引起休眠
	 * timer 要删除的定时器
	 */
	int del_timer_sync(struct timer_list *timer)
3、高精度定时器
	低精度定时器基于 jiffies 实现，一般 jiffies 频率为每秒100~1000khz，所以的精度定时器精度不高，为了解决这个问题系统提供了一种高精度
定时器 struct hrtimer ，其精度可达 us 级，如下是高精度定时器的数据结构和常用函数：
	/**
	 * 高精度定时器的数据结构
	 */
	struct hrtimer {
		struct timerqueue_node node;
		//定时时间，可由函数ktime_t ktime_set(const s64 secs, const unsigned long nsecs)生成
		ktime_t _softexpires;
		//回调函数，此回调函数处于中断上下文，返回HRTIMER_NORESTART表示不需要重启。返回HRTIMER_RESTART表示需
		//要重启
		enum hrtimer_restart (*function)(struct hrtimer *);
		struct hrtimer_clock_base *base;
		unsigned long state;
	};
	/**
	 * 初始化定时器
	 * timer 要初始化的定时器
	 * which_clock 时钟类型，CLOCK_REALTIME 真实时间，通常从RTC或网络获取，从1970-01-01开始计算，
	 *                       CLOCK_MONOTONIC 从系统开机开始计数的单调递增时间，但是当系统进入休眠时不会增加。
	 *                       CLOCK_BOOTTIME 与CLOCK_MONOTONIC类似，但是当休眠时会依然增加
	 * mode 时间模式，HRTIMER_MODE_REL 相对时间，HRTIMER_MODE_ABS 绝对时间
	 * 此函数不会设置function的值
	 */
	void hrtimer_init(struct hrtimer *timer, clockid_t which_clock, enum hrtimer_mode mode)
	/**
	 * 启动定时器
	 * timer 要启动的定时器
	 * tim 定时时间
	 * mode 时间模式，HRTIMER_MODE_REL 相对时间，HRTIMER_MODE_ABS 绝对时间
	 */
	int hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
	/**
	 * 修改定时器定时时间
	 * timer 定时器
	 * tim 定时时间
	 */
	u64 hrtimer_forward_now(struct hrtimer *timer, ktime_t interval)
	/**
	 * 取消定时器
	 * timer 要取消的定时器
	 */
	int hrtimer_cancel(struct hrtimer *timer)

